if (gdk_drag_handle_source_event (event))
return;
+ if (gdk_surface_handle_event (event))
+ return;
+
if (_gdk_event_func)
(*_gdk_event_func) (event, _gdk_event_data);
}
void gdk_surface_get_unscaled_size (GdkSurface *surface,
int *unscaled_width,
int *unscaled_height);
+gboolean gdk_surface_handle_event (GdkEvent *event);
+
/*****************************************
* Interfaces provided by windowing code *
{
gdk_surface_set_state (surface, (surface->state | set_flags) & ~unset_flags);
}
+
+gboolean
+gdk_surface_handle_event (GdkEvent *event)
+{
+ if (gdk_event_get_event_type (event) == GDK_CONFIGURE)
+ {
+ g_signal_emit (gdk_event_get_surface (event), signals[SIZE_CHANGED], 0,
+ event->configure.width, event->configure.height);
+ return TRUE;
+ }
+
+ return FALSE;
+}
}
break;
- case GDK_CONFIGURE:
- if (GTK_IS_WINDOW (event_widget) &&
- _gtk_widget_get_surface (event_widget) == event->any.surface)
- {
- gtk_window_configure (GTK_WINDOW (event_widget),
- event->configure.width,
- event->configure.height);
- }
-
- break;
-
case GDK_FOCUS_CHANGE:
case GDK_GRAB_BROKEN:
if (!_gtk_widget_captured_event (event_widget, event))
gtk_widget_set_surface (widget, surface);
g_signal_connect_swapped (surface, "notify::state", G_CALLBACK (surface_state_changed), widget);
+ g_signal_connect_swapped (surface, "size-changed", G_CALLBACK (gtk_window_configure), widget);
gtk_widget_register_surface (widget, surface);
GTK_WIDGET_CLASS (gtk_window_parent_class)->realize (widget);
g_signal_handlers_disconnect_by_func (_gtk_widget_get_surface (widget),
G_CALLBACK (surface_state_changed),
widget);
+ g_signal_handlers_disconnect_by_func (_gtk_widget_get_surface (widget),
+ G_CALLBACK (gtk_window_configure),
+ widget);
GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);